Linux Development 2010

Imagemap
Linux Development 2010IntroductionIntroduce my selfHousekeepingAgendaCensusProgramming PrimerWhat is programmingDevelopment CyclePlanningCoding, testing and documentingDeploymentMaintenanceProgramming paradigmsProceduralDeclarativeLanguage typesScripting languagesShell ScriptingPerlTclPHPPythonRubyMany othersIntermediate languageJava: Java, Jyton, Scala, etcMono: C#,VB.NET, etc...Compiled languagesCC++PascalVala...AdviceCommand line automationShell scriptingLearning to programScripting languages (Python, Ruby)High ProductivityIntermediate languagesScripting languagesHigh performanceCompiledLow levelCHigh PortabilityCScriptingIntermediate languagesProgramming Ecosystem overviewDevelopment targetsConsoleno outputecho outputnCursesdialogGraphical Desktop Environmentzenity, kdialog, gdialog, xdialog, GTKDi ...GnomeKDEXFCEEnlightenmentMany others...WebStaticDynamic Server sideDynamic AJAXMobile OSAndroidMeeGoWebOSLiMOEmbedded systemsBasic toolsetEditorGCCGDBMakeLibrariesToolkits (GUI libraries)GTKQTEFLXFCFLTKwxWidgets[TCL]TKTileGnocl[Java]AWT/SwingPivotThinletSWTMany others...AdviceDevelopment Frameworks[for Ruby][for PHP][for Perl][for Python]OpenLaszloDatabasesRDBMSNon RelationalInterfacesVersion Control SystemsCVSSubversionGitMany others...Development EnvironmentsEditorsVimEmacsNEditJEditAny EditorIDEsAnjuta (GTK)KDevelop (KDE)QT CreatorCode::Blocks (wxWidgets)EclipseNetBeans (Java)MonoDevelop (.NET)Lazarus (FreePascal)Val(a)IDEAndroid App InventorProprietaryVisual programmingSikuliOpen BlocksAndroid - App InventorStarLogo TNGScratchPackagingdebrpmothers ...Comparisons & DemosJoining a FLOSS project
hide
Linux Development 2010 User Link
hide
Programming Primer
hide
Language types
hide
Scripting languages

Interpreted at run time

Faster turn around development

High portability

hide
Shell Scripting

Automates the execution of commands that would normally be interpreted by the command line

hide
bash - Bourn Again shell

the most common shell (Command line)

leaf

There are many tutorials. Google "Bash Tutorial".

My favourite: Steve-parker.org/sh

leaf

Bash reference accordion

leaf

Scripting shell with C-like syntax

leaf

Superset of Bash

leaf

Originally developed for text manipulation

Practical, not beautiful

Lots of regular expressions

Lots of 3rd party modules

OO although almost no-one uses OO with Perl

Has the concept of "current" variable

leaf

Truly general purpose language

Easy to create GUIs

leaf

Hypertext preprocesor

Especially suited for Web development

In the same category of JSP and ASP

Anything that's not code is output

leaf

General purpose OO

Easy to learn: Elegance and clarity are

Easy to read

Relies on C library functions

leaf

A dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write.

Mostly used for Ruby on Rails

Everything is an object

hide
Intermediate language

Compiled into an intermediate language which is interpreted at run time

Good portability

An interpreter (virtual machine) must exist to run them

leaf

Java is a programming language and computing platform (Virtual machine)

JVM - Runtime

JDK - Development libraries

leaf

An open source, cross-platform, .NET development framework compatible with Microsoft.NET

hide

Compiled directly into machine language

Non portable: Must be recompiled for different OSs and hardware architectures.

Faster than the other two types in general.

leaf
C User Link

Simple, powerful

Gives you all the rope you need to hang yourself

Ported to every platform

leaf

General purpose

C meta language

C#-like syntax

Easy to link or wrap C libraries

Used in Gnome apps

hide

http://www.yolinux.com/TUTORIALS/LinuxTutorialSoftwareDevelopment.html

http://www.faqs.org/docs/ldev/

hide
Development targets
hide
Console

Also know as command line, terminal, character mode

leaf

nCurses provides a framework to create nice looking UI (User Interface)s in text mode.

sudo aptitude install libncurses5-dev

leaf

Dialog allows displaying simple but useful text mode windows that show and get information

sudo aptitude install dialog

Examples under

/usr/share/doc/dialog/examples/

hide

Graphical User Interface that allows the user to interact with programs graphically.

If you are targeting a particular Desktop environment, it is better if you develop under that environment to get all the dependencies, but test under another, to ensure you know what those dependencies are.

hide
Mobile OS
leaf

Google's mobile operating system

leaf

Fusion of Mobilin (Intel) and Maemo (Nokia)

leaf

Palm's Linux based mobile OS

leaf

Independent foundation

hide

A toolkit is a set of programming libraries that work together to simplify development.

A toolkit provides a consistent architecture and API.

leaf

Gimp Tool Kit, used by Gnome and several other desktop environments

gtkmm are the bindings for C++

http://library.gnome.org/devel/references

leaf

Highly portable Toolkit used by KDE and other environments such as Symbian and Maemo/MeeGo, Windows Mobile

leaf

Enlightenment semi-toolkit

leaf

XFCE wrapper to the GTK

leaf

Fast and Light toolkit

leaf

Cross platform: Uses Native Platform libraries

http://docs.wxwidgets.org/stable/

hide
leaf

Ugly

leaf

Less ugly

leaf

GTK

hide
leaf

Part of the Java Foundation Classes. Swing is built in top of AWT extending the functionality.

leaf

RIA (Rich Internet Application) toolkit

leaf

Toolkit for J2SE

leaf

Developed by IBM as part of the Eclipse platform. Simpler than Swing but more limited

hide

Databases are special applications that help developers store, organize and access the data in a simple and consistent way.

hide

Help you keep track of changes in your code.

Can help remember what you did to your code and when.

Helps communicating and coordinating with other developers working on the same project.

leaf

The grandfather of Linux version control systems.

Centralized model where all the changes go into a central repository.

It used to be the most popular but now most projects are migrating to other Version Control Systems.

leaf

Subversion was created to overcome the limitations of CVS.

Centralized model where all the changes go into a central repository.

It is currently aging and some projects are migrating to distributed Version Control Systems

leaf

Extremely fast distributed version control system.

Each developer has a personal repository where they can manage their own code and only integrate with other people's repository when they feel comfortable with their code.

Used by the Linux Kernel.

Many projects are migrating from CVS or Subversion to Git.

hide
hide
Editors
leaf

Vim is a highly configurable text editor built to enable efficient text editing. It is an improved version of the vi editor distributed with most UNIX systems.

Can be configured to have syntax highlighting, code completion and integration with compilers and debugers.

I takes time to learn how to use it but once mastered it can be more productive than traditinal graphical IDEs.

Lighter than Emacs.

leaf

Emacs is an extensible text editor.

Can be configured to have syntax highlighting, code completion and integration with compilers and debugers.

Mode files allow configuring it for particular development environments.

I takes time to learn how to use it but once mastered it can be more productive than traditinal graphical IDEs.

Some may say, more configurable than Vim.

leaf

Java based editor, ported to many platforms where Java is available

Plugins can be installed from within the editor.

hide

IDE : Integrated Development Environment

IDEs are programs that provide facilities to the programmer,hiding details of project setup and compilation.

IDEs usually provide editors with syntax highlighting and code completion. Project management, Documentation generators, debuggers, compilers, etc. in a single package.

leaf

Multilanguage IDE

C, C++, Java, Python

Requires wxWidgets

Git integration (Enable Git Plugin)

Integrated Glade for UI design (Although not well integrated with C++)

Must manually associate UI and code

leaf

Unsupported in Lucid. Need to enable "Unsupported updates"

Can target KDE, Gnome and others

Used to be multilanguage on version 3.x for version 4 only C++ and PHP

Requires installing cmake separately (Ubuntu)

leaf

Created by Nokia, owners of QT

Highly polished

Only QT

Only C++

leaf

Professional quality IDE

Extensible

Primarily Java but other language plugins available

Android development environment

Nice tutorials at http://www.vogella.de

BlackBerry development environment

leaf

Java based development environment

Oracle (formerly Sun) sponsored.

Plugins for several other languages and frameworks including PHP/Zend, RubyOnRails, C, C++.

hide

Development environment for the Mono framework.

Primarily C#

Plug-ins for other languages

For web development (ASP.NET) install xsp2

sudo aptitude install mono-xsp2

ASP.NET visual editor still under development

leaf

Just like the original Delphi

Desktop applications

Web Services toolkit for web services creation and consumption

Extensions for CGI development

leaf

IDE for the Vala language

leaf

Program Android apps in a 100% graphical environment

Currently requires invitation.

hide
Visual programming
leaf

Almost-typeless-environment to script GUI repetitive tasks.

Java based, Jython engine underneath

Not in repositories

Requires

  • python-opencv
  • libcvaux
  • libcxxtools6

Context menus require capturing with another screen capture utility such as ksnapshot

Exporting to executable generates a file that can be executed by passing it as a parameter

Can create a shell script to execute without typing.

hide

Java library for creating blocks-based programming UIs.

leaf

OpenBlocks based visual platform to develop Android applications

leaf

http://education.mit.edu/drupal/starlogo-tng

leaf

Scratch is a programming language that makes it easy to create your own interactive stories, animations, games, music, and art -- and share your creations on the web.